public class Solution152 {
    /**
     * 给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字）。
     */
    public int maxProduct(int[] nums) {
        int max = Integer.MIN_VALUE;
        int iMax = 1;
        int iMin = 1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0){
                int tem = iMax;
                iMax = iMin;
                iMin = tem;
            }
            iMax = Math.max(iMax * nums[i], nums[i]);
            iMin = Math.min(iMin * nums[i], nums[i]);
            max = Math.max(max,iMax);
        }
        return max;
    }

    public int maxProduct2(int[] nums) {
        int sum = 1;
        int ans = nums[0];
        // 从左往右乘 有个最大值
        for (int i = 0; i < nums.length; i++)
        {
            sum = sum * nums[i];
            ans = Math.max(ans, sum);
            if (nums[i] == 0)
            {
                sum = 1;
            }
        }
        // 从右往左乘 有个最大值
        sum = 1;
        for (int i = nums.length-1; i >= 0; i--)
        {
            sum = sum * nums[i];
            ans = Math.max(ans, sum);
            if (nums[i] == 0)
            {
                sum = 1;
            }
        }
        return ans;
    }
}
